第43回 シェル芸勉強会振り返り 問題と解答
from 第43回 シェル芸勉強会振り返り #問題と解答
問題と解答
/icons/pass.icon Q1 echo あいうえおから始めて次のように出力してください。
/icons/pass.icon Q2 たかし君は1個11円のうまい棒と1個21円のチロルチョコと1個54円のよっちゃんイカを223円分購入しました。それぞれいくつずつ購入したでしょうか?それぞれ最低一個は購入しているものとします。
/icons/pass.icon Q3 次の10進数表現されたIPアドレスを2進数32桁に変換してください。できた人は逆変換の方法も考えてみてください。
/icons/pass.icon Q4 双子素数を出力していってください。双子素数とは、差が2となる素数のペアのことです。
/icons/fail.icon Q5 1から9の整数の組み合わせで、足して10になり、互いに数字が異なる組み合わせ(順番を入れ替えたものを含む)を全て列挙してください。
/icons/pass.icon Q6 次のnumsファイルについて、Q5のような数字の並びになっている部分を、何行目に存在したかと共に出力してください。
/icons/pass.icon Q7 次のような100x100ピクセルのビットマップファイルを作ってください。
/icons/fail.icon Q8 check.bmpを何か文字列をワンライナーで仕込んだビットマップに変換し、ビットマップからその文字を抽出して端末に表示してみてください。文字列を仕込んだビットマップは画像として開けることを確認のこと。
/icons/fail.icon Q9 さらに、文字列を仕込んだビットマップをpng形式にして、さらにそれをビットマップに復元して仕込んだ文字が読めることを確認してください。
まとめ
正答率 6/9
組み合わせや双子素数などアルゴリズムの問題に直面したときに、僕はついforでループしてしまう癖があるんだなぁと気づいた
複数行のデータを扱う必要が出たときに、ついforで配列アクセスする方を考えてしまうのはもはや僕の癖
一般のプログラミング言語では配列とforで回すので、そちらの方法をまず考えてしまう
別にforを使うのが悪いとは思っていないが、使える芸の幅を狭めてしまってももったいない
どうせならパイプで繋いで処理できるように、パイプ思考なデータの捉え方を養う必要がある
上田先生はawk使うの上手
awkは行データを扱うのに非常に強力なので、もう少し使いこなせるようになりたい
画像やバイナリ操作系はやはり苦手
BMP操作系のシェル芸は、普通にシェルを使う分だとまず目にしないと思うけれど、セキュリティ界隈だと目にしそうだと思った